Volver al índice Ejercicios - DTD

Se pueden consultar las soluciones de estos ejercicios.


DTD - Ejercicio 1 - Elementos sin atributos - Corregir errores en los elementos

Los siguientes documentos no son válidos porque contienen uno o dos errores (los errores no están en la DTD interna). Corrija los errores y compruebe con XML Copy Editor que ya son documentos válidos.

  1. Números (dtd_11.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE numeros [
      <!ELEMENT numeros (#PCDATA)>
    ]>
    
    <numeros>
      <numero>25</numero>
    </numeros>
  2. Letras (dtd_12.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE letras [
      <!ELEMENT letras (letra)>
      <!ELEMENT letra (#PCDATA)>
    ]>
    
    <letras>
      <letra>m</letra>
      <letra>uve doble</letra>
    </letras>
  3. Colores (dtd_13.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE colores [
      <!ELEMENT colores (color*)>
      <!ELEMENT color (#PCDATA)>
    ]>
    
    <colores>
      <color>azul marino</color>
      negro
      <color>amarillo</color>
    </colores>
  4. Flores (dtd_14.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE flores [
      <!ELEMENT flores (flor+)>
      <!ELEMENT flor (#PCDATA)>
    ]>
    
    <flores>
    </flores>
  5. Animales (dtd_15.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE animales [
      <!ELEMENT animales (animal*)>
      <!ELEMENT animal (#PCDATA)>
    ]>
    
    <animales>
      <perro>Caniche</perro>
      <gato>Siamés</gato>
    </animales>
  6. Escritores (dtd_16.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE escritores [
      <!ELEMENT escritores (escritor*)>
      <!ELEMENT escritor (nombre, nacimiento)>
      <!ELEMENT nombre (#PCDATA)>
      <!ELEMENT nacimiento (#PCDATA)>
    ]>
    
    <escritores>
      <escritor>
        <nombre>Mario Vargas LLosa</nombre>
        <nacimiento>28 de marzo de 1936</nacimiento>
      </escritor>
      <escritor>
        <nacimiento>1 de abril de 1929</nacimiento>
        <nombre>Milan Kundera</nombre>
      </escritor>
    </escritores>
  7. Músicos (dtd_17.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE musicos [
      <!ELEMENT musicos (musico*)>
      <!ELEMENT musico ((nombre | apodo), fechaNacimiento)>
      <!ELEMENT nombre (#PCDATA)>
      <!ELEMENT apodo (#PCDATA)>
      <!ELEMENT fechaNacimiento (#PCDATA)>
    ]>
    
    <musicos>
      <musico>
        <nombre>Antonio Vivaldi</nombre>
        <apodo>El cura pelirrojillo</apodo>
        <fechaNacimiento>4 de marzo de 1678</fechaNacimiento>
      </musico>
      <musico>
        <nombre>Johann Sebastian Bach</nombre>
        <apodo>El viejo peluca</apodo>
        <fechaNacimiento>21 de marzo de 1685</fechaNacimiento>
      </musico>
    </musicos>
  8. Teléfonos de emergencia (dtd_18.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE agenda [
      <!ELEMENT agenda (contacto*)>
      <!ELEMENT contacto (nombre, telefonoFijo*, telefonoMovil+)>
      <!ELEMENT nombre (#PCDATA)>
      <!ELEMENT telefonoFijo (#PCDATA)>
      <!ELEMENT telefonoMovil (#PCDATA)>
    ]>
    
    <agenda>
      <contacto>
        <nombre>Ayuntamiento</nombre>
        <telefonoFijo>010</telefonoFijo>
      </contacto>
      <contacto>
        <nombre>Emergencias</nombre>
        <telefonoFijo>112 (Unión Europea)</telefonoFijo>
        <telefonoMovil>Desconocido</telefonoMovil>
        <telefonoFijo>911 (Estados Unidos)</telefonoFijo>
      </contacto>
    </agenda>
  9. El sistema solar (dtd_19.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE sistemaSolar [
      <!ELEMENT sistemaSolar (cuerpo*)>
      <!ELEMENT cuerpo ((planeta|satelite|asteroide)+)>
      <!ELEMENT planeta (#PCDATA)>
      <!ELEMENT satelite (#PCDATA)>
      <!ELEMENT asteroide (#PCDATA)>
    ]>
    
    <sistemaSolar>
      <cuerpo>
        <planeta>Tierra</planeta>
        <satelite>Luna</satelite>
      </cuerpo>
      <asteroide>Ceres</asteroide>
    </sistemaSolar>

Volver al principio de la página


DTD - Ejercicio 2 - Elementos sin atributos - Corregir errores en la DTD

Los siguientes documentos no son válidos porque contienen errores (los errores están en la DTD interna). Corrija los errores y compruebe con XML Copy Editor que ya son documentos válidos. Casi siempre habrá varias maneras de corregir la DTD, intente elegir la más sencilla.

  1. Marcadores (dtd_21.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE favoritos [
      <!ELEMENT favoritos (marcador)>
      <!ELEMENT marcador (nombre, uri)>
      <!ELEMENT nombre (#PCDATA)>
      <!ELEMENT uri (#PCDATA)>
    ]>
    
    <marcadores>
      <marcador>
        <nombre>W3C</nombre>
        <uri>http://www.w3.org/</uri>
      </marcador>
      <marcador>
        <nombre>Web Hypertext Application Technology Working Group (WHATWG)</nombre>
        <uri>http://www.whatwg.org/</uri>
      </marcador>
    </marcadores>
  2. Efemérides (dtd_22.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE efemerides [
      <!ELEMENT efemerides (efemeride)>
      <!ELEMENT efemeride (fecha, hecho)>
    ]>
    
    <efemerides>
      <efemeride>
        <fecha>20 de julio de 1969</fecha>
        <hecho>Llegada del hombre a la Luna</hecho>
      </efemeride>
      <efemeride>
        <fecha>12 de octubre de 1492</fecha>
        <hecho>Llegada de Colón a América</hecho>
      </efemeride>
      <efemeride>
        <fecha>6 de abril de 1909</fecha>
        <hecho>llegada de Robert Peary al Polo Norte</hecho>
      </efemeride>
    </efemerides>
  3. Aeropuertos (dtd_23.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE aeropuertos [
      <!ELEMENT aeropuertos (aeropuerto*)>
      <!ELEMENT aeropuerto (nombre, cerrado)>
      <!ELEMENT nombre (#PCDATA)>
      <!ELEMENT cerrado (#PCDATA)>
    ]>
    
    <aeropuertos>
      <aeropuerto>
        <nombre>Berlín Schönefeld (SFX)</nombre>
      </aeropuerto>
      <aeropuerto>
        <nombre>Berlín Tempelhof (THF)</nombre>
        <cerrado />
     </aeropuerto>
    </aeropuertos>
  4. Vuelos (dtd_24.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE vuelos [
      <!ELEMENT vuelos (vuelo*)>
      <!ELEMENT vuelo (origen, destino)>
      <!ELEMENT origen (#PCDATA)>
      <!ELEMENT destino (#PCDATA)>
    ]>
    
    <vuelos>
      <vuelo>
        <origen>Valencia (VLC)</origen>
        <destino>Londres Heathrow (LHR)</destino>
      </vuelo>
      <vuelo>
        <destino>Berlín Schönefeld (SFX)</destino>
        <origen>Paris Charles de Gaulle (CDG)</origen>
      </vuelo>
    </vuelos>
  5. Reyes españoles (dtd_25.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE reyesEspañoles [
      <!ELEMENT reyesEspañoles (rey*, reina*)>
      <!ELEMENT rey (nombre, padre, madre)>
      <!ELEMENT nombre (#PCDATA)>
      <!ELEMENT padre (#PCDATA)>
      <!ELEMENT madre (#PCDATA)>
    ]>
    
    <reyesEspañoles>
      <rey>
        <nombre>Felipe III</nombre>
        <padre>Felipe II</padre>
        <madre>Ana de Austria</madre>
      </rey>
      <reina>
        <nombre>Juana la Loca</nombre>
        <padre>Fernando el Católico</padre>
        <madre>Isabel la Católica</madre>
      </reina>
      <rey>
        <nombre>Carlos I</nombre>
        <padre>Felipe el Hermoso</padre>
        <madre>Juan la Loca</madre>
      </rey>
    </reyesEspañoles>
  6. Países (dtd_26.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE paises [
      <!ELEMENT pais (nombre, unionEuropea, otan)>
      <!ELEMENT nombre EMPTY>
      <!ELEMENT unionEuropea EMPTY>
      <!ELEMENT otan EMPTY>
    ]>
    
    <paises>
      <pais>
        <nombre>España</nombre>
        <unionEuropea />
        <otan />
      </pais>
      <pais>
        <nombre>Noruega</nombre>
        <otan />
      </pais>
      <pais>
        <nombre>Austria</nombre>
        <unionEuropea />
      </pais>
    </paises>
  7. Códigos de colores (dtd_27.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE colores [
      <!ELEMENT colores (color*)>
      <!ELEMENT nombreSvg (#PCDATA)>
      <!ELEMENT rgb (#PCDATA)>
      <!ELEMENT cmyk (#PCDATA)>
    ]>
    
    <colores>
      <color>
        <nombreSvg>Purple</nombreSvg>
        <codigo>
          <rgb>#800080</rgb>
        </codigo>
      </color>
      <color>
        <nombreSvg>Purple</nombreSvg>
        <codigo>
          <cmyk>#00FF007F</cmyk>
        </codigo>
      </color>
    </colores>
  8. Contabilidad (dtd_28.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE contabilidad [
      <!ELEMENT contabilidad ((ingreso | gasto)*)>
      <!ELEMENT fecha (#PCDATA)>
      <!ELEMENT cantidad (#PCDATA)>
      <!ELEMENT concepto (#PCDATA)>
    ]>
    
    <contabilidad>
      <apunte>
        <ingreso />
        <fecha>24 de febrero de 2011</fecha>
        <cantidad>1800,00 €</cantidad>
        <concepto>Salario</concepto>
      </apunte>
      <apunte>
        <gasto />
        <fecha>28 de febrero de 2011</fecha>
        <cantidad>74,25 €</cantidad>
        <concepto>Recibo luz</concepto>
      </apunte>
    </contabilidad>
  9. Mensajes (dtd_29.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mensajes [
      <!ELEMENT mensajes (mensaje)>
      <!ELEMENT de (#PCDATA)>
      <!ELEMENT para (#PCDATA)>
      <!ELEMENT hora (#PCDATA)>
      <!ELEMENT texto (#PCDATA)>
      <!ELEMENT strong (#PCDATA)>
    ]>
    
    <mensajes>
      <mensaje>
        <de>Pepe (pepe@example.com)</de>
        <para>Juan (juan@example.com)</para>
        <hora>28/02/2011 17:48:23,61</hora>
        <texto>¿Hola, Juan, qué haces?</texto>
      </mensaje>
      <mensaje>
        <de>Juan (juan@example.com)</de>
        <para>Pepe (pepe@example.com)</para>
        <hora>28/02/2011 17:54:20,87</hora>
        <texto>Aquí, aprendiendo <strong>XML</strong></texto>
      </mensaje>
    </mensajes>

Volver al principio de la página


DTD - Ejercicio 3 - Elementos con atributos - Corregir errores en los elementos

Los siguientes documentos no son válidos porque contienen uno o dos errores (los errores no están en la DTD interna). Corrija los errores y compruebe con XML Copy Editor que ya son documentos válidos.

  1. Datos personales (dtd_31.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE persona [
      <!ELEMENT persona EMPTY>
      <!ATTLIST persona nombre CDATA #IMPLIED>
    ]>
    
    <persona dni="03141592E" />
  2. Película (dtd_32.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE pelicula [
      <!ELEMENT pelicula EMPTY>
      <!ATTLIST pelicula titulo CDATA #IMPLIED>
    ]>
    
    <pelicula titulo="La diligencia" genero="oeste" />
  3. Cuadros (dtd_33.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE cuadros [
      <!ELEMENT cuadros (cuadro*)>
      <!ELEMENT cuadro EMPTY>
      <!ATTLIST cuadro titulo ID #REQUIRED>
      <!ATTLIST cuadro autor CDATA #REQUIRED>
    ]>
    
    <cuadros>
      <cuadro titulo="Adán y Eva" autor="Alberto Durero" />
      <cuadro autor="Lucas Cranach, el viejo" titulo="Adán y Eva" />
    </cuadros>
  4. Lista de la compra (dtd_34.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE listaCompra [
      <!ELEMENT listaCompra (item*)>
      <!ELEMENT item EMPTY>
      <!ATTLIST item nombre CDATA #REQUIRED>
      <!ATTLIST item cantidad CDATA #REQUIRED>
    ]>
    
    <listaCompra>
      <leche cantidad="12 litros" ></leche>
      <pan cantidad="3 barras de cuarto" />
    </listaCompra>
  5. Jugadores de fútbol (dtd_35.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE futbol [
      <!ELEMENT futbol (jugador*)>
      <!ELEMENT jugador EMPTY>
      <!ATTLIST jugador nombre NMTOKENS #REQUIRED>
      <!ATTLIST jugador codigo ID #REQUIRED>
    ]>
    
    <futbol>
      <jugador nombre="Alfredo Di Stéfano" codigo="1"/>
      <jugador nombre="Edson Arantes do Nascimento, Pelé" codigo="2" />
      <jugador nombre="Diego Armando Maradona" codigo="3" />
      <jugador nombre="Johan Cruyff" codigo="4" />
    </futbol>
  6. Jugadores y equipos de fútbol (dtd_36.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE futbol [
      <!ELEMENT futbol ((jugador|equipo)*)>
      <!ELEMENT jugador EMPTY>
      <!ATTLIST jugador nombre NMTOKENS #REQUIRED>
      <!ATTLIST jugador codigo ID #REQUIRED>
      <!ELEMENT equipo EMPTY>
      <!ATTLIST equipo nombre CDATA #REQUIRED>
      <!ATTLIST equipo jugadores IDREFS #IMPLIED>
    ]>
    
    <futbol>
      <jugador nombre="Alfredo Di Stéfano" codigo="ads"/>
      <jugador nombre="Edison Arantes do Nascimento" codigo="ean" />
      <jugador nombre="Diego Armando Maradona" codigo="dam" />
      <jugador nombre="Johan Cruyff" codigo="jc" />
      <equipo nombre="Società Sportiva Calcio Napoli" jugadores="Maradona" />
      <equipo nombre="Futbol Club Barcelona" jugadores="Cruyff, Maradona" />
    </futbol>

Volver al principio de la página


DTD - Ejercicio 4 - Elementos con atributos - Corregir errores en la DTD

Los siguientes documentos no son válidos porque contienen errores (los errores están en la DTD interna). Corrija los errores y compruebe con XML Copy Editor que ya son documentos válidos. Casi siempre habrá varias maneras de corregir la DTD, intente elegir la más sencilla.

  1. Libro (dtd_41.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE libro [
      <!ELEMENT libro EMPTY>
      <!ATTLIST libro autor NMTOKEN #REQUIRED>
    ]>
    
    <libro autor="Mario Vargas LLosa" />
  2. Inventores (dtd_42.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE inventores [
      <!ELEMENT inventores>
      <!ELEMENT inventor EMPTY>
      <!ATTLIST inventor invento CDATA #REQUIRED>
      <!ATTLIST inventor nombre ID #REQUIRED>
    ]>
    
    <inventores>
      <inventor nombre="Robert Adler" invento="Mando a distancia" />
      <inventor nombre="Laszlo Josef Biro" invento="Bolígrafo" />
      <inventor nombre="Josephine Garis Cochran" invento="Lavaplatos" />
      <inventor invento="Fuego" />
    </inventores>
  3. Cosas por hacer (dtd_43.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE cosasPorHacer [
      <!ELEMENT cosasPorHacer (cosa)>
      <!ELEMENT cosa EMPTY>
      <!ATTLIST cosa fecha CDATA #REQUIRED>
      <!ATTLIST cosa asunto CDATA #REQUIRED>
      <!ATTLIST cosa fechaLimite CDATA #REQUIRED>  
    ]>
    
    <cosasPorHacer>
      <cosa fecha="20 de febrero de 2011" fechaLimite="1 de marzo de 2011">
      Preparar ejercicios de DTDs</cosa>
      <cosa fecha="21 de febrero de 2011" fechaLimite="5 de marzo de 2011">
      Preparar tema XSLT</cosa>
    </cosasPorHacer>
  4. Resoluciones de pantalla (dtd_44.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE resoluciones [
      <!ELEMENT resoluciones EMPTY>
      <!ATTLIST resoluciones nombre NMTOKEN #REQUIRED>
      <!ATTLIST resoluciones alto CDATA #REQUIRED>
      <!ATTLIST resoluciones ancho CDATA #REQUIRED>
    ]>
    
    <resoluciones>
      <resolucion nombre="VGA" alto="480" ancho="640" />
      <resolucion nombre="XGA" alto="1024" ancho="768" />
      <resolucion nombre="HD 1080" alto="1920" ancho="1080" />
    </resoluciones>
  5. Álbumes de Mortadelo y Filemón (dtd_45.xml)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE albumesMortadelo [
      <!ELEMENT albumesMortadelo (album*)>
      <!ELEMENT album (nombre, fecha)>
      <!ATTLIST album nombre CDATA #REQUIRED>
      <!ATTLIST album fecha(1969,1970,1971,1972,1973,1974) #REQUIRED>
    ]>
    
    <albumesMortadelo>
      <album nombre="El sulfato atómico" fecha="1969"/>
      <album nombre="La caja de diez cerrojos" fecha="1971"/>
      <album nombre="El otro yo del profesor Bacterio" fecha="1973"/>
      <album nombre="Los cacharros majaretas" fecha="1974"/>
    </albumesMortadelo>

Volver al principio de la página


DTD - Ejercicio 5 - DTDs alternativos

Se quiere definir un lenguaje de marcas para representar los resultados de una liga de fútbol. La información que se quiere almacenar de cada partido es:

Escribe tres documentos que incluyan los siguientes resultados:

Cada documento incluirá un DTD diferente para representar ese lenguaje de marcas:

Volver al principio de la página

Esta página forma parte del curso "XML: Lenguaje de Marcas Extensible" disponible en http://www.mclibre.org
Autor: Bartolomé Sintes Marco
Última modificación: 6 de marzo de 2011

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.